import java.util.Scanner;
import java.util.Stack;

public class 点击消除 {
    // 点击消除
    public static void main1(String[] args) {
        Scanner in = new Scanner(System.in);
        // 1.读入字符串
        String str = in.nextLine();
        // 特殊判定, 如果给定字符串为空, 则直接输出0
        if(str.length() == 0) {
            System.out.print(0);
        }
        // 2.将字符串转成字符数组
        char[] ch = str.toCharArray();

        // 3.准备一个栈
        Stack<Character> stackA = new Stack<>();
        stackA.push(ch[0]);

        // 4.遍历字符数组, 将所有字符入栈
        for (int i = 1; i < ch.length; i++) {
            if(stackA.isEmpty()) {
                // 如果栈空了, 但是字符数组中还有元素, 说明是之前的元素抵消后导致栈空.
                // 此时直接将当前字符入栈即可,并进入下次循环
                stackA.push(ch[i]);
                continue;
            }
            // peek栈顶元素
            char top = stackA.peek();
            // 栈顶元素与当前字符相比较, 如果两者相同, 则栈顶元素出栈, 当前字符不入栈, 跳到下一个字符
            if(top == ch[i]) {
                stackA.pop();
            }else {
                // 如果不相同, 则将当前字符入栈
                stackA.push(ch[i]);
            }
        }

        // 5.如果栈A为空,则输出0
        if(stackA.isEmpty()) {
            System.out.println(0);
        }else {
            // 如果不为空, 则构造一个新的栈B, 将栈A中的元素入栈B, 然后依次出栈B的栈顶元素
            Stack<Character> stackB = new Stack<>();
            while(!stackA.isEmpty()) {
                char top = stackA.pop();
                stackB.push(top);
            }

            // 依次打印栈B的栈顶元素(打印一个出栈一个)
            while(!stackB.isEmpty()) {
                System.out.print(stackB.pop());
            }
        }
    }
}
